# demo03_encap.py
# 创建银行账户类，包含的属性有账号、户名、余额、手机号码
# 如果类名称由多个单词组成，使用大驼峰命名法，将每个单词首字母都大写
class BankAccount:
    # 在构造方法中添加属性
    def __init__(self, number, holder, balance, phone):
        # 设置为私有属性，只能在类的内部访问到
        # 私有属性以__开头的属性
        self.__account_number = number  # 账号
        self.__account_holder = holder  # 户名
        self.__account_balance = balance  # 余额
        self.__phone = phone   # 手机号码
    # 添加方法（暴露的接口），可以访问到银行账号
    def get_account_number(self):
        return self.__account_number
    def get_account_holder(self):
        return self.__account_holder
    def get_account_balance(self):
        return self.__account_balance
    # 访问手机号码
    def get_phone(self):
        return self.__phone
    # 修改手机号码
    def set_phone(self, phone):
        self.__phone = phone
    # 修改账户余额（私有方法），不能被外部调用
    # 私有方法，方法名称以__开头
    def __edit_balance(self, num):
        self.__account_balance += num
    # 存款方法
    def deposit(self, num):
        # 判断存款的值是否为正数
        if num > 0:
            self.__edit_balance(num)
            print('存款成功！当前余额：', self.__account_balance)
        else:
            print('存款失败，不能是负数')
    # 取款方法
    def draw(self, num):
        # 如果大于0 ，并且余额足够多
        if num>0 and self.__account_balance>=num:
            self.__edit_balance(-num)
            print(f'取款成功！您每次取款{num}元，余额：{self.__account_balance}')
        elif self.__account_balance<num:
            print('取款失败！余额不足')
        else:
            print('取款金额不能小于0')

if __name__ == '__main__':
    a1 = BankAccount('6222001', '小明', 1000, '18812345678')
    # print(a1.__account_number)
    # print('账号：', a1.get_account_number())
    # a1.set_phone('19988889999')
    # print(a1.get_phone())
    # 调用修改余额方法
    # a1.__edit_balance(10000)
    # a1.deposit(10000)
    a1.draw(800)